﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Objects;

namespace ImobitechDao.Repositories
{
    public class VisitaRepository : BaseRepository<Visita>, IVisitaRepository
    {

        #region Implementação obrigatoria da classe base
        public VisitaRepository(ImobitechEntities context) : base(context) { }

        protected override string TableName
        {
            get { return "Visita"; }
        }

        protected override string EntitySetName
        {
            get { return "Visita"; }
        }
        #endregion

        public Pessoa_Papel buscaFuncionario(DateTime dataAntes, DateTime dataDepois)
        {
            IQueryable teste = (from p in _context.Pessoa
                                join pp in _context.Pessoa_Papel on p.Id equals pp.Pessoa.Id
                                join pa in _context.Papel on pp.Papel.Id equals pa.Id
                                where !(from v in _context.Visita
                                        join pe in _context.Pessoa_Papel on v.Pessoa_Papel1.Id equals pe.Id
                                        where v.DataVisita >= dataAntes && v.DataVisita < dataDepois
                                        select pe.Id).Contains(pp.Id) && pa.Nome == "Corretor"
                                select pp).AsQueryable();

            ObjectQuery oQuery = (ObjectQuery)teste;
            string cmdSQL = oQuery.ToTraceString();

            return (from p in _context.Pessoa
                    join pp in _context.Pessoa_Papel on p.Id equals pp.Pessoa.Id
                    join pa in _context.Papel on pp.Papel.Id equals pa.Id
                    where !(from v in _context.Visita
                            join pe in _context.Pessoa_Papel on v.Pessoa_Papel1.Id equals pe.Id
                            where v.DataVisita >= dataAntes && v.DataVisita < dataDepois
                            select pe.Id).Contains(pp.Id) && pa.Nome == "Corretor"
                    select pp).FirstOrDefault();
        }

        public List<Visita> buscaHorarios(Pessoa_Papel pessoaFuncionario)
        {
            return (from p in _context.Visita
                    where p.Pessoa_Papel1.Id == pessoaFuncionario.Id
                    select p).ToList();
        }
    }
}
